package cn.iocoder.yudao.module.shop.service.orderfeedback;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.shop.controller.admin.orderfeedback.vo.*;
import cn.iocoder.yudao.module.shop.dal.dataobject.order.ShopOrderDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.order.ShopOrderItemDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.orderfeedback.ShopOrderFeedbackDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 顾客订单反馈 Service 接口
 *
 * @author 曹建伟
 */
public interface ShopOrderFeedbackService {

    /**
     * 创建顾客订单反馈
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOrderFeedback(@Valid ShopOrderFeedbackCreateReqVO createReqVO);

    /**
     * 更新顾客订单反馈
     *
     * @param updateReqVO 更新信息
     */
    void updateOrderFeedback(@Valid ShopOrderFeedbackUpdateReqVO updateReqVO);

    /**
     * 删除顾客订单反馈
     *
     * @param id 编号
     */
    void deleteOrderFeedback(Long id);

    /**
     * 获得顾客订单反馈
     *
     * @param id 编号
     * @return 顾客订单反馈
     */
    ShopOrderFeedbackDO getOrderFeedback(Long id);

    /**
     * 获得顾客订单反馈列表
     *
     * @param ids 编号
     * @return 顾客订单反馈列表
     */
    List<ShopOrderFeedbackDO> getOrderFeedbackList(Collection<Long> ids);

    /**
     * 获得顾客订单反馈分页
     *
     * @param pageReqVO 分页查询
     * @return 顾客订单反馈分页
     */
    PageResult<ShopOrderFeedbackDO> getOrderFeedbackPage(ShopOrderFeedbackPageReqVO pageReqVO);

    /**
     * 获得顾客订单反馈列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 顾客订单反馈列表
     */
    List<ShopOrderFeedbackDO> getOrderFeedbackList(ShopOrderFeedbackExportReqVO exportReqVO);

    ShopOrderFeedbackDO getByOrderId(Long orderId);

    List<ShopOrderFeedbackDO> getListbyOrderId(Collection<Long> orderIds);

    ShopOrderFeedbackDO createByOrder(ShopOrderDO shopOrderDO, List<ShopOrderItemDO> orderItemDOList);

    Boolean rollback(ShopOrderDO order);

    ShopOrderFeedbackDO confirm(@Valid ShopOrderFeedbackUpdateReqVO updateReqVO);

}
